package com.intelligent.mapper;

import com.intelligent.pojo.Product;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import org.apache.ibatis.annotations.Param;

import java.util.List;

/**
* @author lenovo
* @description 针对表【product(产品信息表)】的数据库操作Mapper
* @createDate 2025-08-27 15:58:27
* @Entity com.intelligent.pojo.Product
*/
public interface ProductMapper extends BaseMapper<Product> {

	/**
	 * 分页查询产品（左连接单位与仓库），支持多条件筛选。
	 * 参数均为可选，空值不参与筛选。
	 *
	 * @param page 分页对象
	 * @param productCode 产品编码（模糊）
	 * @param productName 产品名称（模糊）
	 * @param sourceType 来源类型（模糊）
	 * @param status 状态（精确）0启用 1停用
	 * @return 分页结果，包含单位名称与仓库名称
	 */
	IPage<Product> pageProduct(Page<Product> page,
	                          @Param("productCode") String productCode,
	                          @Param("productName") String productName,
	                          @Param("sourceType") String sourceType,
	                          @Param("status") Integer status);

	/**
	 * 导出商品信息列表为Excel（左连接单位与仓库）
	 *
	 * @param productCode 产品编码（模糊）
	 * @param productName 产品名称（模糊）
	 * @param sourceType 来源类型（模糊）
	 * @param status 状态（精确）0启用 1停用
	 * @return 商品信息列表
	 */
	List<Product> exportProductInfoToExcel(@Param("productCode") String productCode,
							   @Param("productName") String productName,
							   @Param("sourceType") String sourceType,
							   @Param("status") Integer status);

	/**
	 * 新增产品
	 * @param product 产品实体（product_code 可为空，将在服务层自动生成）
	 * @return 影响行数
	 */
	int insertProduct(@Param("p") Product product);

	/**
	 * 修改产品
	 * @param product 产品实体
	 * @return 影响行数
	 */
	int updateProduct(@Param("p") Product product);

	/**
	 * 根据主键查询产品，联查单位与仓库名称
	 * @param productId 产品id
	 * @return 产品详情（包含 unitName、warehouseName）
	 */
	Product getByIdWithJoin(@Param("productId") Long productId);

	/**
	 * 根据主键删除产品
	 * @param productId 产品id
	 * @return 影响行数
	 */
	int deleteProduct(@Param("productId") Long productId);
}






